package furstadminka.security;

import furstadminka.AutenticBean;
import org.apache.log4j.Logger;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * Сервлет предназначен для осуществления доступа к закрытой папке
 *
 * @author Vit
 */
public class AutorizationFilter implements Filter {

    /**
     * Стандартный логгер
     */
    private static final Logger logger = Logger.getLogger(AutorizationFilter.class);

    /**
     * Достает параметры из дескриптора касательно вида авторизации
     *
     * @param filterConfig Вводные данные в сервлет
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    /**
     * Метод пропускает траффик дальше, если пользователь авторизован, если нет - редирект на страницу с ошибкой
     *
     * @param request  Запрос
     * @param response Ответ
     * @param chain    Другой фильтр по цепочке
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
        HttpSession session = null;
        session = httpRequest.getSession(false);
        if (session!=null) {
            AutenticBean autenticBean = null;
            autenticBean = (AutenticBean) session.getAttribute("autenticbean");
            if(autenticBean!=null){
            if (!autenticBean.isAutoriz()) {
                logger.info("Asscess denied for " + httpRequest.getRemoteAddr());
                httpServletResponse.sendRedirect(httpRequest.getContextPath() + "/errors/securityerroralt.xhtml");
            }
            }
            chain.doFilter(request, response);
        }
        if (session == null) {
            logger.info("Asscess denied for " + httpRequest.getRemoteAddr());
            httpServletResponse.sendRedirect(httpRequest.getContextPath() + "/errors/securityerroralt.xhtml");
        }
    }

    @Override
    public void destroy() {
    }
}
